package dataConstructions_unfinished;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

public class T36 {

    public boolean isValidSudoku(char[][] board) {

        Map<Integer, Set<Integer>> row = new HashMap<>(),
                col = new HashMap<>(),
                area = new HashMap<>();

        /**
         * 初始化map
         * 9行 9列 9个区域
         * 每个模块都可以通过set的contains方法来查重2
         */
        for (int i = 0; i < 9; i++) {
            row.put(i, new HashSet<>());
            col.put(i, new HashSet<>());
            area.put(i, new HashSet<>());
        }

        //遍历board
        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                char c = board[i][j];
                if (c == '.')
                    continue;
                int u = c - '0';
                int index = i/3 * 3 + j/3;
                if (row.get(i).contains(u) ||
                col.get(j).contains(u) ||
                area.get(index).contains(u)) {
                    return false;
                }
                row.get(i).add(u);
                col.get(j).add(u);
                area.get(index).add(u);
            }
        }
        return true;

//        int[][] rows = new int[9][9];
//        int[][] columns = new int[9][9];
//        int[][][] subboxes = new int[3][3][9];
//        for (int i = 0; i < 9; i++) {
//            for (int j = 0; j < 9; j++) {
//                char c = board[i][j];
//                if (c != '.') {
//                    int index = c - '0' - 1;
//                    rows[i][index]++;
//                    columns[j][index]++;
//                    subboxes[i / 3][j / 3][index]++;
//                    if (rows[i][index] > 1 ||
//                            columns[j][index] > 1 ||
//                            subboxes[i / 3][j / 3][index] > 1) {
//                        return false;
//                    }
//                }
//            }
//        }
//        return true;
    }

}